#ifndef Signal2_H
#define Signal2_H
#include "Global_Signal.h"
#include "abstractSignal.h"

template <class T, class U, class V>
class Signal2 : public AbstractSignal
{
    public :

    /*************************************************************/
    /*                      Properties                           */
    /*************************************************************/

    T * objetSignal;            /*!< Pointeur vers l'objet de base	*/


    U arg1;
    V arg2;

    /*************************************************************/
    /*                      Constructor                          */
    /*************************************************************/

    Signal2(int (T::*apSignal)(U, V),T * ref, U arg, V aArg2);

    /*************************************************************/
    /*                      Methods                              */
    /*************************************************************/

    void Update();
};

template <class T, class U, class V>
Signal2<T,U,V>::Signal2(int (T::*apSignal)(U,V),T * ref, U arg, V aArg2) :
    objetSignal(ref), pSignal(apSignal),arg1(arg), arg2(aArg2)
{}

template <class T, class U, class V>
void Signal2<T,U,V>::Update()
{
        if((objetSignal->*pSignal)(arg1, arg2))
        {
                Run();
        }
}

#endif // Signal2_H
